package com.hhs.storage.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hhs.storage.bean.BaseDepartment;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hhs.storage.bean.BaseMenu;
import com.hhs.storage.bean.BaseUser;
import com.hhs.storage.bean.InputParam;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author hhs
 * @since 2023-01-12
 */
public interface BaseDepartmentService extends IService<BaseDepartment> {

    //部门新增或编辑
    Map<String, Object> addOrUpdate(BaseDepartment baseDepartment) ;

    Map<String, Object> dele(String id) ;
    Map<String, Object> join(String userId,String departId,String seeDepartId,Integer type) ;

    /**
     * @Author: HuangHaiShui
     * @Description:根据用户id，查询该用户的所属部门
     * @Date: 17:29 2023/1/12
     * @param userId:
     * @return: List<BaseDepartment>
     **/
    List<BaseDepartment> findByUserId(String userId);
    List<BaseDepartment> findSeeByUserId(String userId);

    /*
     * @Description:根据部门获取用户数据 ，分页
     * 仅获取传入id的部门人员，不包含子部门，id可以传多个
     **/
    Map<String, Object> getUsers(InputParam inputParam);

    //用在个人计划，留言功能，排除掉自己
    Map<String, Object> getUsersEx(InputParam inputParam);
    Map<String, Object> isPrincipal(InputParam inputParam) throws IOException;

    /**
     * 获取当前登录用户的部门和下级部门信息
     * @return
     */
    public Map<String, Object> getDepartDataByLoginUser(InputParam inputParam);
    /**
     * 获取指定用户所属部门所有成员与下级部门所有成员
     * @return
     */
    public List<BaseUser> getUserDepartAllUser(String userId);
    List<BaseDepartment> getAll();
    /**
     * 获取当前登录用户的部门领导信息
     * 2023-04-21修改 还要查上上级部门领导
     * @return
     */
    public Map<String, Object> getDepartHeader();

    /**
     * 获取所有子部门
     * @param pid
     * @return
     */
    public List<BaseDepartment> getChildDeparts(String pid);
    /**
     * 获取用户的所属部门与子部门
     * @return
     */
    public Map<String, Object> getUserDepartInfo();

    Map<String, Object> sumUsers(Integer type);

    Map<String, Object> indexDepart();


    Map<String, Object> principalOpera(String userId);
    /**
     * 根据当前用户的部门关系类型获取部门数据
     * @param type leader=查询上级 user=查询下级
     * @return
     */
    public Map<String, Object> getDepartByRelateType(String type);
    /**
     * 根据关系类型获取部门用户数据
     * @param type  leader=查询负责人 user=查询职员
     * @param departIds
     * @return
     */
    public Map<String, Object> getDepartUserDataByRelateType( String type,String departIds) ;

    /**
     * 获取所有部门负责人
     * @return
     */

    public Map<String, Object> getAllHeaders();
    /**
     * 获取所有部门负责人有分页
     * @return
     */
    public Page getAllHeaders(InputParam inputParam);
    /**
     * 获取专属业务部门
     * @return
     */
    public Map<String, Object> getBusinessSiteDepart();

    /**
     * 获取用户的上级部门和自身部门
     * @param userId
     * @return
     */
    public Map<String,Object> getParentDepartsByUserId(String userId);
}
